<?php
/**
 * Displays an autocomplete text input.
 *
 * @package Elgg
 * @subpackage Core
 *
 * @todo This currently only works for ONE AUTOCOMPLETE TEXT FIELD on a page.
 *
 * @uses $vars['value'] The current value, if any
 * @uses $vars['js'] Any Javascript to enter into the input tag
 * @uses $vars['internalname'] The name of the input field
 * @uses $vars['match_on'] Array | str What to match on. all|array(group|user|friend|subtype)
 * @uses $vars['match_owner'] Bool.  Match only entities that are owned by logged in user.
 *
 */
global $autocomplete_js_loaded;

$internalname = $vars['internalname'];
$value = $vars['value'];

if (!$value) {
    $value = '';
}

if ($vars['internal_id']) {
    $id_autocomplete = $vars['internal_id'];
}

$ac_url_params = http_build_query(array(
            'match_on' => $vars['match_on'],
            'match_owner' => $vars['match_owner'],
        ));
       
$ac_url = $vars['url'] . 'pg/hypesearch?' . $ac_url_params;

if (!isset($autocomplete_js_loaded)) {
    $autocomplete_js_loaded = false;
}
?>

<!-- show the input -->
<input type="text" class='autocomplete <?php echo $vars['extra_class'] ?>' name ='<?php echo $internalname; ?>' value='<?php echo $value ?>' id ='<?php echo $internalname; ?>' />

<?php
if (!$autocomplete_js_loaded) {
?>

    <!-- include autocomplete -->
    <script language="javascript" type="text/javascript" src="<?php echo $vars['url']; ?>vendors/jquery/jquery.autocomplete.min.js"></script>
    <script type="text/javascript">
        function bindAutocomplete() {
            var inputfield = $('input[type=text].autocomplete');
            var inputvalue = inputfield.val();
            inputfield
            .autocomplete("<?php echo $ac_url; ?>", {
                max: 1000,
                minChars: 2,
                matchContains: true,
                autoFill: false,
                formatItem: function(row, i, max, term) {
                    eval("var info = " + row + ";");
                    var r = '';
                    r = info.desc;
                    return r.replace(new RegExp("(" + term + ")", "gi"), "<b>$1</b>");
                }
            })
            .result(function(event, data, formatted) {
                eval("var info = " + data + ";");
                $(this).val(inputvalue);
                location.href = info.url;
            });
        }

        $(document).ready(function() {
            bindAutocomplete();
        });

    </script>

<?php
    $autocomplete_js_loaded = true;
} else {
?>
    <!-- rebind autocomplete -->
    <script type="text/javascript">bindAutocomplete();</script>
<?php
}